package com.my.study.net;

import lombok.extern.slf4j.Slf4j;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;

/**
 * @author Carlos
 * @version 1.0
 * @Description 使用字符流
 * @date 2021/7/3 21:16
 */
@Slf4j(topic = "c.SocketTCP03Client")
public class SocketTCP03Client {

    public static void main(String[] args) throws IOException {
        // 1.连接服务器
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
        log.debug("客户端 socket返回: {}", socket.getClass());

        //=======================================向服务端发送消息
        // 2.通过socket创建输出流对象
        OutputStream out = socket.getOutputStream();
        // 2.1 将字节输出流 转换为字符输出流
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
        writer.write("Hello Server 字符流");
        // 再写入一个换行符，表示写入的内容结束
        // 要求读取方使用readLine()
        writer.newLine();
        // 需要手动刷新，否则数据不会写入数据通道
        writer.flush();


        //=======================================接收服务端发送的消息
        InputStream in = socket.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        String context = reader.readLine();
        log.debug("context: {}", context);

        // 关闭流，如果流被包装或者转换了，关闭最外层的流即可
        // 后打开的流先关闭
        reader.close();
        writer.close();
        socket.close();


        log.debug("客户端退出....");
    }

}
